1. Technical Field
The present invention relates to storage subsystems, and more specifically, to storage subsystems that implement both standard and non-standard commands.
2. Description of the Related Art
Storage subsystems are widely used to store various types of data. An operating system (“OS”) device driver, executed on a host system, performs input and output (“I/O”) commands to communicate with a storage subsystem. Conventionally, OS device drivers for storage subsystems support a standard storage interface command set, such as an Advanced Technology Attachment (“ATA”), Serial ATA (“SATA”), SCSI, USB, RS232/423, PCMCIA, Firewire (IEEE-1394), FibreChannel, or PCI Express command set.
Often, it is advantageous for a storage subsystem to support one or more non-standard or “vendor-specific” commands that are not part of a standard command set. These vendor-specific commands may be implemented using unassigned command opcodes of the standard interface, and may provide access to non-standard features of the storage subsystem. For example, a storage subsystem may implement vendor-specific commands for enabling a host to retrieve usage statistics data, retrieve other device state information, purge the subsystem's memory array, or provide data security.
Conventional approaches for implementing vendor-specific commands typically rely on creating, and installing on the host computer, a custom OS device driver that supports one or more particular vendor-specific commands. Typically, different versions of the custom OS device driver must be created for different operating systems such as Windows, MacOS and Linux, and often for different versions of the same operating system. This typically involves the burdensome tasks of rewriting the driver code to support each desired operating system (or version thereof), debugging the code, and distributing, installing, and periodically upgrading custom OS device drivers. This process may be further complicated if the provider of the OS requires certification of the custom OS drivers, or does not provide access to the device driver source code.